# -*- coding: utf-8 -*-
# author: sixmillions
# date: 2022/3/24

# 逻辑运算符
# and or not

# 与
print(True and True)  # True
# 短路与，第一个为真才执行后面的，所以下面代码不会报错
print(False and (1 / 0))

# 或
print(1 or 3)  # 1
# 短路或，第一个为假才执行后面的，所以下面代码不会报错
print(True or (1 / 0))  # True

# 非（取反）
print(not False)  # True
print(not True)  # False
print(not 1)  # False
print(not ())  # True

# 其他
# not (not True)
print(not not True)  # True

# 短路与
print(bool('a'))  # True
print(bool('b'))  # True
# 第一个True 直接返回第二个值
print('a' and 'b')  # b
# 第一个False 直接返回第一个值
print(0 and 'b')  # 0

# 短路或
# 第一个True 直接返回第一个值
print('a' or 'b')  # a
# 第一个False 直接返回第二个
print('' or 'b')  # b

# 空值都会被认为 False
print(bool(0), bool(''), bool([]), bool(()), bool(set()), bool({}), bool(None))  # 全是False

#
